package uva.sc.ql.parser;
import java.util.ArrayList;
import java.util.List;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import org.antlr.v4.runtime.Token;
import uva.sc.core.errors.IError;
import uva.sc.core.errors.Syntax;
import uva.sc.ql.parser.exceptions.InlineRecognitionException;
public class QLErrorListener extends BaseErrorListener {
private final List<IError> errors = new ArrayList<IError>();
public List<IError> getErrors() {
return errors;
}
@Override
public void syntaxError(Recognizer<?, ?> recognizer,
Object offendingSymbol, int line, int charPositionInLine,
String msg, RecognitionException e) {
msg = "Line " + line + " " + msg;
if (e == null) {
// e is null when the parser was able to recover in line without
// exiting the surrounding rule.
e = new InlineRecognitionException(msg, recognizer,
((Parser) recognizer).getInputStream(),
((Parser) recognizer).getContext(), (Token) offendingSymbol);
}
this.errors.add(new Syntax(msg, e));
}
}